package fr.ajicommerce.managedBean;

import java.io.Serializable;

import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import fr.ajicommerce.core.dto.CompteClientDTO;
import fr.ajicommerce.core.service.facade.Facade;
import fr.ajicommerce.core.service.interfaces.CompteClientService;

// Bean Controller
@Component("loginFrontOfficeBean")
@Scope("request")
public class LoginFrontOfficeBean implements Serializable {

	private static final long serialVersionUID = -4577167155828913786L;

	@Autowired
	Facade facade;

	private String login;
	private String password;
	private boolean authFailed;

	public LoginFrontOfficeBean() {
	}

	private Facade getFacade() {
		return facade;
	}
	
	/**
	 * Y a-t-il un Client dans la BDD
	 * qui correspond au couple (login, password) ?
	 * 
	 * @return le prochain url-pattern de connexion
	 */
	public String connection() {
		CompteClientService service = getFacade().getCompteClientService();
		
		// y a-t-il un Client dans la Base de Données ?
		CompteClientDTO client = service.findByLoginAndPassword(login, password);
		boolean hasAccount = (client != null);
		
		// le Client est autorisé si il possède
		// un CompteClient dans la Base de Données
		if (hasAccount) {
			// si le Client est authentifié, on le sauvegarde
			FacesContext context = FacesContext.getCurrentInstance();
			context.getExternalContext().getSessionMap().put("client", client);
			
			// il est redirigé
			return "/FrontOffice/gest_espace_client.xhtml";
		}
		else {
			setAuthFailed(true);
		}

		
		return null;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	public void setAuthFailed(boolean authFailed) {
		this.authFailed = authFailed;
	}
	
	public boolean getAuthFailed() {
		return authFailed;
	}
	
}
